package com.elh.jpa.service;

import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;

import java.io.Serializable;
import java.util.List;
import java.util.Optional;

public interface IQueryService<T extends Serializable,ID> {

    T getOne(ID id);

    Optional<T> findOne(T t);

    List<T> findAllById(Iterable<ID> ids);

    Optional<T> findById(ID id);

    boolean existsById(ID id);

    <S extends T> boolean exists(T t);

    List<T> findAll();

    Iterable<T> findAll(Sort sort);

    Page<T> findAllByPage(int page, int size);

    Page<T> findAllByPage(int page, int size,Sort sort);

    Page<T> findAllByPage(int page, int size,T t,Sort sort);

    long count(T t);

    long count();
}
